home *** CD-ROM | disk | FTP | other *** search
/ QuickTime 1.0 for Developers / QuickTime 1.0 for Developers.iso / Programming Stuff / Interfaces / Movies Interfaces / MoviesFormat.h < prev    next >
C/C++ Source or Header  |  1991-09-06  |  12KB  |  504 lines

  1.  
  2. /************************************************************
  3.  
  4. Created: Wednesday, August 28, 1991 at 1:56 AM
  5.  MoviesFormat.h
  6.  C Interface to the Macintosh Libraries
  7.  
  8.  
  9.   Copyright Apple Computer, Inc. 1991
  10.   All rights reserved
  11.  
  12. ************************************************************/
  13.  
  14.  
  15. #ifndef __MOVIESFORMAT__
  16. #define __MOVIESFORMAT__
  17.  
  18. #ifndef __MOVIES__
  19. #include <Movies.h>
  20. #endif
  21.  
  22. #define kMovieVersion    (-1)                /* version number of the format here described */
  23.  
  24. struct MoviesUserData {
  25.     long        size;                        /* size of this user data */
  26.     long        type;                        /* type of user data */
  27.     char         data[1];                    /* the user data */
  28. };
  29. typedef struct MoviesUserData MoviesUserData;
  30.  
  31. struct UserDataAtom {
  32.     long             size;
  33.     long            type;                    /* = 'udat' */
  34.     MoviesUserData    userData[1];
  35. };
  36. typedef struct UserDataAtom UserDataAtom;
  37.  
  38. /*
  39. struct SampleDescription {
  40.     long        size;
  41.     long        type;
  42.     long        resvd1;
  43.     short        resvdA;
  44.     short        dataRefBlobId;
  45.     };
  46. typedef struct SampleDescription SampleDescription;
  47. */
  48.  
  49. struct SampleDescriptionAtom {
  50.     long        size;
  51.     long        type;                            /* = 'stsd' */
  52.     long        flags;                            /* 1 byte of version / 3 bytes of flags */
  53.     long        numEntries;
  54.     SampleDescription    sampleDescTable[1];
  55. };
  56. typedef struct SampleDescriptionAtom SampleDescriptionAtom;
  57.  
  58. struct TimeToSampleNum {
  59.     long        sampleCount;
  60.     TimeValue    sampleDuration;
  61. };
  62. typedef struct TimeToSampleNum TimeToSampleNum;
  63.  
  64. struct TimeToSampleNumAtom {
  65.     long        size;
  66.     long        type;                            /* = 'stgs' */
  67.     long        flags;                            /* 1 byte of version / 3 bytes of flags */
  68.     long        numEntries;
  69.     TimeToSampleNum    timeToSampleNumTable[1];
  70. };
  71. typedef struct TimeToSampleNumAtom TimeToSampleNumAtom;
  72.  
  73. struct SyncSampleAtom{
  74.     long        size;
  75.     long        type;                                /* = 'stss' */
  76.     long        flags;                                /* 1 byte of version / 3 bytes of flags */
  77.     long        numEntries;
  78.     long        syncSampleTable[1];
  79. };
  80. typedef struct SyncSampleAtom SyncSampleAtom;
  81.  
  82. struct SampleToChunk {
  83.     long        firstSample;
  84.     long        firstChunk;
  85.     long        samplesPerChunk;
  86.     long        sampleDescriptionID;
  87. };
  88. typedef struct SampleToChunk SampleToChunk;
  89.  
  90. struct SampleToChunkAlternate1 {                /* same as SampleToChunk, but redundant first sample is removed */
  91.     long        firstChunk;
  92.     long        samplesPerChunk;
  93.     long        sampleDescriptionID;
  94. };
  95. typedef struct SampleToChunkAlternate1 SampleToChunkAlternate1;
  96.  
  97. enum {sampleToChunkAlternate1 = 1<<0};
  98. typedef unsigned char SampleToChunkFlags;
  99.  
  100. struct SampleToChunkAtom {
  101.     long        size;
  102.     long        type;                                /* = 'stsc' */
  103.     long        flags;                                /* 1 byte of version / 3 bytes of flags */
  104.     long        numEntries;
  105.     SampleToChunk    sampleToChunkTable[1];
  106. };
  107. typedef struct SampleToChunkAtom SampleToChunkAtom;
  108.  
  109. struct ChunkOffsetAtom {
  110.     long        size;
  111.     long        type;                                /* = 'stco' */
  112.     long        flags;                                /* 1 byte of version / 3 bytes of flags */
  113.     long        numEntries;
  114.     long        chunkOffsetTable[1];
  115. };
  116. typedef struct ChunkOffsetAtom ChunkOffsetAtom;
  117.  
  118. struct SampleSizeAtom {
  119.     long        size;
  120.     long        type;                                /* = 'stsz' */
  121.     long        flags;                                /* 1 byte of version / 3 bytes of flags */
  122.     long        sampleSize;
  123.     long        numEntries;
  124.     long        sampleSizeTable[1];
  125. };
  126. typedef struct SampleSizeAtom SampleSizeAtom;
  127.  
  128. struct SampleTableAtom {
  129.     long        size;
  130.     long        type;            /* = 'stbl' */
  131.  
  132.     SampleDescriptionAtom    sampleDescription;
  133.     TimeToSampleNumAtom        timeToSampleNum;
  134.     SampleToChunkAtom        sampleToChunk;
  135.     SyncSampleAtom            syncSample;
  136.     SampleSizeAtom            sampleSize;
  137.     ChunkOffsetAtom            chunkOffset;
  138.     
  139. };
  140. typedef struct SampleTableAtom SampleTableAtom;
  141.  
  142.     
  143. struct PublicHandlerInfo {
  144.     long                flags;                                /* 1 byte of version / 3 bytes of flags */
  145.     long                componentType;                        /* mhdr or dhdr */
  146.     long                componentSubType;                    /* info to find media handler */
  147.     long                componentManufacturer;
  148.     long                componentFlags;
  149.     long                componentFlagsMask;
  150.     char                componentName[1];
  151.     
  152. };
  153. typedef struct PublicHandlerInfo PublicHandlerInfo;
  154.     
  155. struct HandlerAtom {
  156.     long                size;
  157.     long                type;                            /* = 'hdlr' */
  158.     
  159.     PublicHandlerInfo    hInfo;    
  160. };
  161. typedef struct HandlerAtom HandlerAtom;
  162.     
  163.     
  164. typedef long DataRefAtom;                                /* a data reference is a private structure */
  165.  
  166. struct DataInfoAtom {
  167.     long                size;
  168.     long                type;                            /* = 'dinf' */
  169.     DataRefAtom            dataRef;
  170. };
  171. typedef struct DataInfoAtom DataInfoAtom;
  172.  
  173. struct RgnAtom {
  174.     long        size;
  175.     long        type;
  176.     
  177.     long        flags;                                    /* 1 byte of version / 3 bytes of flags */
  178.     
  179.     short        rgnSize;
  180.     Rect        rgnBBox;
  181.     char        data[1];
  182. };
  183. typedef struct RgnAtom RgnAtom;
  184.  
  185. struct MatteAtom {
  186.     long        size;
  187.     long        type;
  188.     
  189.     long        flags;                                    /* 1 byte of version / 3 bytes of flags */
  190.     
  191.     PixMap        mattePixMap;
  192.     ColorTable    matteColorTable;
  193. };
  194. typedef struct MatteAtom MatteAtom;
  195.  
  196. struct ClippingAtom {
  197.     long        size;
  198.     long        type;
  199.     
  200.     RgnAtom        aRgnClip;
  201. };
  202. typedef struct ClippingAtom ClippingAtom;
  203.     
  204. struct VideoMediaInfoHeader {
  205.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  206.     short                graphicsMode;                    /* for QD - transfer mode */
  207.     short                opColorRed;                        /* opcolor for transfer mode */
  208.     short                opColorGreen;
  209.     short                opColorBlue;
  210.     
  211. };
  212. typedef struct VideoMediaInfoHeader VideoMediaInfoHeader;
  213.  
  214.  
  215. struct VideoMediaInfoHeaderAtom {
  216.     long                size;                            /* size of Media info */
  217.     long                type;                            /* = 'vmhd' */
  218.     VideoMediaInfoHeader    vmiHeader;
  219. };
  220. typedef struct VideoMediaInfoHeaderAtom VideoMediaInfoHeaderAtom;
  221.  
  222. struct VideoMediaInfo {
  223.     long                size;                            /* size of Media info */
  224.     long                type;                            /* = 'minf' */
  225.     VideoMediaInfoHeaderAtom    header;
  226.     HandlerAtom            dataHandler;
  227.     DataInfoAtom        dataInfo;
  228.     SampleTableAtom        sampleTable;
  229. };
  230. typedef struct VideoMediaInfo VideoMediaInfo;
  231.  
  232.         
  233. struct SoundMediaInfoHeader {
  234.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  235.  
  236.      short                balance;                
  237.     short                rsrvd;
  238.     
  239. };
  240. typedef struct SoundMediaInfoHeader SoundMediaInfoHeader;
  241.  
  242. struct SoundMediaInfoHeaderAtom {
  243.     long                size;                            /* size of Media info */
  244.     long                type;                            /* = 'vmhd' */
  245.     
  246.     SoundMediaInfoHeader    smiHeader;    
  247. };
  248. typedef struct SoundMediaInfoHeaderAtom SoundMediaInfoHeaderAtom;
  249.  
  250. struct SoundMediaInfo {
  251.     long                size;                            /* size of Media info */
  252.     long                type;                            /* = 'minf' */
  253.     
  254.     SoundMediaInfoHeaderAtom    header;
  255.     
  256.     HandlerAtom            dataHandler;
  257.     
  258.     DataRefAtom            dataReference;
  259.     
  260.     SampleTableAtom        sampleTable;
  261. };
  262. typedef struct SoundMediaInfo SoundMediaInfo;
  263.  
  264. struct MediaInfo {
  265.     long            size;
  266.     long            type;
  267.     
  268.     /* whatever data the media handler needs goes here */
  269. };
  270. typedef struct MediaInfo MediaInfo;
  271.  
  272.  
  273. /***********************
  274. * Media Directory Structures 
  275. ***********************/    
  276.  
  277. struct MediaHeader {
  278.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  279.     
  280.     long                creationTime;                    /* seconds since Jan 1904 when directory was created */
  281.     long                modificationTime;                /* seconds since Jan 1904 when directory was appended */
  282.  
  283.     TimeValue            timeScale;                        /* start time for Media (Media time) */
  284.     TimeValue            duration;                        /* length of Media (Media time) */
  285.  
  286.     short                language;
  287.     short                quality;
  288. };
  289. typedef struct MediaHeader MediaHeader;
  290.  
  291. struct MediaHeaderAtom {
  292.     long         size;
  293.     long        type;            
  294.     
  295.     MediaHeader    header;
  296. };
  297. typedef struct MediaHeaderAtom MediaHeaderAtom;
  298.  
  299. struct MediaDirectory {
  300.     long                size;
  301.     long                type;                            /* = 'mdia' */
  302.     
  303.     MediaHeaderAtom            mediaHeader;                /* standard Media information */
  304.  
  305.     HandlerAtom            mediaHandler;
  306.  
  307.     MediaInfo            mediaInfo;
  308. } ;
  309. typedef struct MediaDirectory MediaDirectory;
  310.  
  311.  
  312. /***********************
  313. * Track Structures 
  314. ***********************/    
  315.     
  316. enum {
  317.     TrackEnable = 1<<0,
  318.     TrackInMovie = 1<<1,
  319.     TrackInPreview = 1<<2,
  320.     TrackInPoster = 1<<3
  321.     };
  322.     
  323. struct TrackHeader {
  324.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  325.  
  326.     long                creationTime;                    /* seconds since Jan 1904 when directory was created */
  327.     long                modificationTime;                /* seconds since Jan 1904 when directory was appended */
  328.  
  329.     long                trackID;
  330.  
  331.     TimeValue            formerTrackTimeScale;            /* start time for track (track time) */
  332.     TimeValue            duration;                        /* length of track (track time) */
  333.     TimeValue            movieTimeOffset;                /* this offset is in movie time */        
  334.  
  335.     PriorityType        priority;
  336.     short                layer;
  337.     short                alternateGroup;
  338.  
  339.     short                volume;
  340.     short                reserved1;
  341.  
  342.     MatrixRecord        matrix;
  343.     Fixed                trackWidth;
  344.     Fixed                trackHeight;
  345.         
  346. } ;
  347. typedef struct TrackHeader TrackHeader;
  348.  
  349. struct TrackHeaderAtom {
  350.     long                size;                            /* size of track header */
  351.     long                type;                            /* = 'tkhd' */
  352.         
  353.     TrackHeader        header;
  354. };
  355. typedef struct TrackHeaderAtom TrackHeaderAtom;
  356.  
  357. struct EditListType {
  358.     TimeValue        trackDuration;
  359.     TimeValue        mediaTime;
  360.     Fixed            mediaRate;
  361. };
  362. typedef struct EditListType EditListType;
  363.  
  364. struct EditListAtom {
  365.     long                size;
  366.     long                type;                            /* = elst */
  367.     
  368.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  369.  
  370.     long                numEntries;
  371.     EditListType        editListTable[1];
  372. };
  373. typedef struct EditListAtom EditListAtom;
  374.  
  375. struct EditsAtom {
  376.     long            size;
  377.     long            type;                                /* = edts */
  378.     
  379.     EditListAtom    editList;
  380. };
  381. typedef struct EditsAtom EditsAtom;
  382.  
  383. struct TrackDirectory {
  384.     long                size;
  385.     long                type;                            /* = 'trak' */
  386.  
  387.     TrackHeaderAtom            trackHeader;                /* standard track information */
  388.  
  389.     ClippingAtom        trackClip;
  390.  
  391.     EditsAtom            edits;
  392.     
  393.     MediaDirectory        media;
  394.     
  395.      UserDataAtom        userData;                        /* space for extending with new data types */
  396. } ;
  397. typedef struct TrackDirectory TrackDirectory;
  398.  
  399. struct MovieHeader {
  400.     long                flags;                            /* 1 byte of version / 3 bytes of flags */
  401.  
  402.     long                creationTime;                    /* seconds since Jan 1904 when directory was created */
  403.     long                modificationTime;                /* seconds since Jan 1904 when directory was appended */
  404.  
  405.     /* Time specifications */
  406.     TimeValue            timeScale;
  407.     TimeValue            duration;
  408.     Fixed                preferredRate;                    /* rate at which to play this movie */
  409.  
  410.     short                preferredVolume;                /* volume to play movie at */
  411.     short                reserved1;            
  412.  
  413.     /* Graphics specifications */
  414.     long                preferredLong1;                    
  415.     long                preferredLong2;                    
  416. /* option is to have a preferred matrix here */
  417.     MatrixRecord        matrix;
  418.     TimeValue            previewTime;                    /* time in track the proxy begins (track time) */
  419.     TimeValue            previewDuration;                /* how long the proxy lasts (track time) */
  420.     TimeValue            posterTime;                        /* time in track the proxy begins (track time) */
  421.     TimeValue            selectionTime;                    /* time in track the proxy begins (track time) */
  422.     TimeValue            selectionDuration;                /* time in track the proxy begins (track time) */
  423.     TimeValue            currentTime;                    /* time in track the proxy begins (track time) */
  424.     long                 nextTrackID;                    /* next value to use for a TrackID */
  425.  
  426. };
  427. typedef struct MovieHeader MovieHeader;
  428.  
  429. struct MovieHeaderAtom {
  430.     long                size;
  431.     long                type;                            /* = 'mvhd' */
  432.     MovieHeader         header;
  433. };
  434. typedef struct MovieHeaderAtom MovieHeaderAtom;
  435.  
  436. struct MovieDirectory {
  437.     long                size;
  438.     long                type;                            /* = 'moov' */
  439.     MovieHeaderAtom        header;
  440.     ClippingAtom        movieClip;                
  441.     
  442.     /* Track Directories */
  443.     struct {
  444.         TrackDirectory  trackDirectory;                 /* Track directory information */    
  445.         }                 track[1];
  446.          
  447.      /* User data for Movie */
  448.      UserDataAtom        userData;                        /* space for user extensions */
  449.      
  450. };
  451. typedef struct MovieDirectory MovieDirectory;
  452. /* Movie formats and tags */
  453.     /* some system defined format IDs */
  454.     #define    MOVIE_TYPE        'moov'
  455.     #define TRACK_TYPE        'trak'
  456.     #define MEDIA_TYPE        'mdia'
  457.     #define VIDEO_TYPE        'vide'
  458.     #define SOUND_TYPE        'soun'
  459.     #define MIDI_TYPE        'midi'
  460.  
  461.     #define EMPTY_TAG        0x00
  462.  
  463.     #define    TEXT_TYPE                'text'
  464.     /* An example of some common name sub-types. */
  465.     #define    COPYRIGHT_TEXT            'cprt'
  466.     #define    SOURCE_NAME_CUSTOM        'snam'
  467.  
  468.  
  469. /* atom id's */
  470.     #define MovieAID                'moov'
  471.     #define MovieHeaderAID            'mvhd'
  472.     #define ClipAID                    'clip'
  473.     #define RgnClipAID                'crgn'
  474.     #define MatteClipAID            'cmat'
  475.     #define MatteImageDescAID         'mtid'
  476.     #define MatteDataAID            'mtda'
  477.     #define TrackAID                'trak'
  478.     #define    UserDataAID                'udta'
  479.     #define    TrackHeaderAID            'tkhd'
  480.     #define EditsAID                'edts'
  481.     #define EditListAID                'elst'
  482.     #define MediaAID                'mdia'
  483.     #define MediaHeaderAID            'mdhd'
  484.     #define    MediaInfoAID            'minf'
  485.     #define MediaInfoHeaderAID        'mihd'
  486.     #define VideoMediaInfoHeaderAID    'vmhd'
  487.     #define SoundMediaInfoHeaderAID    'smhd'
  488.     #define DataInfoAID                'dinf'
  489.     #define DataRefAID                'dref'
  490.     #define SampleTableAID            'stbl'
  491.     #define STSampleDescAID            'stsd'
  492.     #define STGroupToSampAID        'stgs'
  493.     #define STSyncSampleAID            'stss'
  494.     #define STSampleToChunkAID        'stsc'
  495.     #define HandlerAID                'hdlr'
  496.     #define STSampleSizeAID            'stsz'
  497.     #define STChunkOffsetAID        'stco'
  498.  
  499.     #define DataRefBlobAID 'blob'
  500.     #define DataRefContainerAID 'drfc'
  501.     
  502.  
  503. #endif __MOVIESFORMAT__
  504.